package main

import "fmt"

func add(num1 int, num2 int) int {
	return num1 + num2
}

func showNums(nums ...int) {
	for i := 0; i < len(nums); i++ {
		fmt.Println(nums[i])
	}
}

func changeNumByPoint(num *int) {
	*num = 10
}

func testFunc(num int) {
	fmt.Println("test func ->", num)
}

type myFunc func(int) // 自定义个一个函数类型 ，作为入参
func testFunc2(num int, myfunc myFunc) {
	fmt.Println("test func2 num -> ", num)
	myfunc(2)
}

func main() {
	sum := add(10, 20)
	fmt.Println("sum:", sum)
	fmt.Println("----------------")
	showNums(1, 2, 3, 4)
	fmt.Println("----------------")
	testnum := 20
	changeNumByPoint(&testnum)
	fmt.Println(testnum)
	fmt.Println("----------------")

	fun1 := testFunc    // 声明一个函数类型
	testFunc2(10, fun1) // 函数类型作为参数输入

	fmt.Println("----------------")
	sum1, sub1 := sumAndSub1(20, 10)
	fmt.Printf("sum1: %v , sub1 : %v \n", sum1, sub1)
	sum2, sub2 := sumAndSub2(20, 10)
	fmt.Printf("sum2: %v , sub2 : %v \n", sum2, sub2)
}
